package com.webserver.core;

import com.webserver.http.HttpContext;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 该类用于完成处理请求的工作
 */
public class DispatcherServlet {
    /*
        单例模式  java23中设计模式之一
        当一个类仅需要一个实例时，可使用此种模式。
        三个步骤：
        1.提供静态的私有的当前类的属性
        2.私有化构造方法
        3.提供静态的公开的获取当前类实例的方法
        在方法中可判断步骤1的静态属性是否为null，是，则实例化对象（仅此一次）
        否则直接返回该实例
     */
    //单例模式：定义一个静态的属性，私有化构造器，提供公开的静态get方法。买书：图解设计模式。23种经典设计模式。
    private static DispatcherServlet obj;
    private DispatcherServlet(){}
    public static DispatcherServlet getInstance(){
        if (obj == null){//初始化
            obj = new DispatcherServlet();
        }
        return obj;
    }
    public void service(HttpServletRequest request, HttpServletResponse response){
        String path = request.getUri();
        //将./webapps/myweb/index.html响应给浏览器
        File file = new File("./webapps"+path);
        if(file.isFile()){//如果定位是文件
            response.setEntity(file);
        }else {//不是文件（要么不存在，要么是目录，404情况）
            file = new File("./webapps/root/404.html");
            response.setStatusCode(404);
            response.setStatusReason("NotFound");
            response.setEntity(file);
        }
        response.addHeader("Server","WebServer");
    }
}
